home *** CD-ROM | disk | FTP | other *** search
/ Delphi Magazine Collection 2001 / Delphi Magazine Collection 20001 (2001).iso / DISKS / ISSUE08 / DATADICT / DBFGET.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1993-12-08  |  3.1 KB  |  134 lines

  1. PROGRAM dbftst;                  {Automenuing activity logging system.}
  2. USES dos, crt,  { Turbo provided units }
  3.      string0,   { string utilities }
  4.      sl_file0;   { file utilities     }
  5. CONST
  6.   copyright                = 'Copyright 1992 by Brandon C. Smith.';
  7.   address                  = 'P. O. Box 613, Mansfield, MO,  65704';
  8.   phone                    = '(417)-924-8021';
  9.   version                  = 0.01;
  10.  
  11.  
  12. TYPE
  13.   dbf_hdr_structure =
  14.     record
  15.       version_mrk          :    byte;
  16.       Last_update          :    array[1..3] of byte;
  17.       Num_recs             :    longint;
  18.       hdr_size             :    integer;
  19.       rec_size             :    integer;
  20.       rsrv_1               :    word;
  21.       trns_flag            :    byte;
  22.       encpt_flag           :    byte;
  23.       multi_info           :    array[1..12] of byte;
  24.       mdx_flag             :    byte;
  25.       rsrv_2               :    array[1..3] of byte;
  26.     end;
  27.  
  28.  
  29.   raw_fld_structure =
  30.     record
  31.       fld_name        :  array[1..11] of byte;
  32.       fld_type        :  byte;
  33.       rsrv_1          :  longint;
  34.       fld_len         :  byte;
  35.       fld_dec         :  byte;
  36.       rsrv_2          :  word;
  37.       wrk_area_id     :  byte;
  38.       rsrv_3          :  array[1..10] of byte;
  39.       mdx_tag         :  byte;
  40.     end;
  41.  
  42.   wrk_fld_ptr = ^wrk_fld_structure;
  43.  
  44.   wrk_fld_structure =
  45.     record
  46.       fld_name          : string[11];
  47.       fld_type          : byte;
  48.       fld_len           : byte;
  49.       fld_dec           : byte;
  50.       nxt_fld           : wrk_fld_ptr;
  51.     end;
  52.  
  53.  
  54. VAR
  55.  
  56.     dbf_hdr      :  dbf_hdr_structure;
  57.     raw_fld      :  raw_fld_structure;
  58.     wrk_fld      :  wrk_fld_structure;
  59.     prv_fld_ptr,
  60.     fst_fld_ptr,
  61.     cur_fld_ptr  :  wrk_fld_ptr;
  62.  
  63.     fn           :  filename;
  64.  
  65.  
  66.  
  67. VAR
  68.  
  69.   dbfp        : file;
  70.   f_err       : word;
  71.   num_flds    :  byte;
  72.   i           : byte;   { for looping through fields... }
  73.  
  74.  
  75.  
  76.  
  77. Function make_str_from_asciiz(var s):string;
  78. type
  79.   bytes = array[0..MaxInt] of Byte;
  80.  
  81. var
  82.   i : byte;
  83.   tmp_str : string;
  84.  
  85. begin
  86.   i := 0;
  87.  while bytes(s)[i] <> 0 do
  88.    begin
  89.      tmp_str := tmp_str + chr(bytes(s)[i]);
  90.      inc(i);
  91.    end;
  92.  make_str_from_asciiz := tmp_str;
  93. end;
  94.  
  95.   PROCEDURE read_nxt_fld;
  96.     BEGIN
  97.         BlockRead(dbfp, raw_fld, SizeOf(raw_fld_structure), f_err);
  98.         new(cur_fld_ptr);
  99.         cur_fld_ptr^.fld_name := make_str_from_asciiz(raw_fld.fld_name);
  100.         cur_fld_ptr^.fld_type := raw_fld.fld_type;
  101.         cur_fld_ptr^.fld_len  := raw_fld.fld_len;
  102.         cur_fld_ptr^.fld_dec  := raw_fld.fld_dec;
  103.         cur_fld_ptr^.nxt_fld  := nil;
  104.     END;
  105.  
  106.  
  107. BEGIN
  108.  
  109.  
  110.   
  111.  
  112.    fn := 'hexlukup.dbf';
  113.    open_to_read_byte(dbfp, fn, f_err);
  114.    blockRead(dbfp, dbf_hdr, sizeOf(dbf_hdr_structure), f_err);
  115.    num_flds := (dbf_hdr.hdr_size - sizeOf(dbf_hdr_structure)) div 32;
  116.    read_nxt_fld;
  117.    fst_fld_ptr := cur_fld_ptr;
  118.    prv_fld_ptr := cur_fld_ptr;
  119.  
  120.    for i := 1 to num_flds do
  121.      begin
  122.         read_nxt_fld;
  123.         prv_fld_ptr^.nxt_fld  := cur_fld_ptr;
  124.         prv_fld_ptr := cur_fld_ptr;
  125.      end;
  126.  
  127.  
  128.  
  129.  
  130.  
  131.    close(dbfp);
  132.  
  133. end.
  134.